<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <input type="text">
    <div></div>

    <script>


        // 有一份数据

        // 劫持一份数据

        function observer(obj , cb) {   // cb就是复刻数据的过程中添加的其他行为
            const res = {} ;
            // 遍历obj
            for(let prop in obj) {
                Object.defineProperty(res , prop , {
                    get() {
                        return obj[prop] ;
                    } ,
                    set(v) {
                        obj[prop] = v ;
                        // 数据发生改变以后，再次调用
                        cb(res) ;
                    }
                })
            }

            // 默认需要执行一次
            cb(res);

            return res 
        }



        const oDiv = document.querySelector('div');
        const oInp = document.querySelector('input');

        const obj = {word:'hello'} ;
        const res = observer( obj, function() {
            oDiv.innerHTML = obj.word
        })


        oInp.oninput = function() {
            res.word = this.value ;
        }
        


    </script>
    
</body>
</html>